#include <iostream>
#include <gtest/gtest.h>
#include <unordered_map>
#include <string>

class MyTest : public testing::Test
{
public:
    // 这个函数不直接通过 testing::Test 的接口被调用。gtest通过特殊的机制来识别这个静态函数，并在适当的时机(TEST_F)调用它。
    static void SetUpTestCase()
    {
        std::cout << "所有单元测试前执行，初始化总环境" << std::endl;
    }

    void SetUp() override
    {
        std::cout << "单元测试执行前的环境初始化" << std::endl;
        _mymap.insert({"Hello", "你好"});
        _mymap.insert({"leihou", "你好"});
    }

    void TearDown() override
    {
        std::cout << "单元测试执行后的环境清理" << std::endl;
        _mymap.clear();
    }

    static void TearDownTestCase()
    {
        std::cout << "所有单元测试完毕后执行，清理总环境" << std::endl;
    }
public:
    std::unordered_map<std::string, std::string> _mymap;
};

TEST_F(MyTest, test1)
{
    _mymap.insert({"hello", "你好"});
    ASSERT_EQ(_mymap.size(), 3);
}

TEST_F(MyTest, test2)
{
    ASSERT_EQ(_mymap.size(), 2);
}

int main(int argc, char *argv[])
{
    testing::InitGoogleTest(&argc, argv);
    
    RUN_ALL_TESTS();

    return 0;
}